package com.Day5;

import java.util.Scanner;

/**
 * Copyright (C), 2018-2021, 若若叶
 * Author: Hx162
 * Date: 2021/7/11 17:42
 * FileName: T1
 * Description: 求兔子繁衍数量
 */

/**
 * 【程序1】
 * 题目：古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，
 * 小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，
 * 问每个月的兔子总数为多少？
 * 程序分析： 兔子的规律为数列1,1,2,3,5,8,13,21....
 * 第三个数开始是前两个数的和
 */
public class T1 {

    public static void main(String[] args) {
        System.out.println("请输入您想知道兔子数量的月份：");
        //创建一个本类对象
        T1 t1 = new T1();
        //调用输入函数inPut(),获取的键入值赋予i
        int i = t1.inPut();
        //调用计算函数calculate()，获取的计算后的值赋予resoult
        int resoult = t1.calculate(i);
        System.out.println(i + "个月后，共有" + resoult + "个兔子。");
    }

    //输入函数
    public int inPut() {
        //新建一个Scanner对象用于键入
        Scanner scanner = new Scanner(System.in);
        //初始化月份
        int i = 1;
        //n为下面一个循环的开关1：运行，0：停止
        int n = 1;
        //此循环用于用户输入值错误的重新输入
        while (n == 1) {
            //键入值赋予i
            i = scanner.nextInt();
            //如果i在此合法，0赋予n，用于关闭此循立即并停止本次循环
            if (i > 0) {
                n = 0;
                break;
            }
            System.out.println("请输入大于0的整数。");
        }
        //返回输入的i
        return i;
    }

    //计算函数
    public int calculate(int i) {
        //如果月份为1或2，直接返回1
        if (i == 1 || i == 2) {
            return 1;
        }
        //前两个数
        int a = 1;
        //前一个数
        int b = 1;
        //当前数
        int c = 2;
        for (int j = 3; j <= i; j++) {
            //第三个数开始是前两个数的和
            c = a + b;
            //将前一个数的值赋给前两个数，下次循环使用
            a = b;
            //将当前数的值赋给前一个数，下次循环使用
            b = c;
        }
        //返回循环结束时当前数
        return c;
    }
}
